/*
    服务端
*/

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>

int main()
{
    char *port = "8888";
    char *ip = "0.0.0.0";
    // 一样先创建socket对象
    int sever_fd = socket(AF_INET, SOCK_STREAM, 0);
    if(sever_fd == -1)
    {
        perror("创建socket对象失败！");
        exit(1);
    }
    // 设置端口，开始监听
    struct sockaddr_in addr;
    addr.sin_addr.s_addr = inet_addr(ip);
    addr.sin_family = AF_INET;
    addr.sin_port = htons(atoi(port));
    // 参数 绑定的那个socket对象，绑定的端口的端口 结构体大小
    bind(sever_fd, (struct sockaddr*)&addr, sizeof(addr));
    
    // 开始监听 ,并设置队列的大小
    listen(sever_fd, 10);

    // 从全连接队列中，取出一个已经三次握手完毕的连接
    // 获得一个专门为这个连接服务的socket对象

    // 参数为文件描述符 后面两个为传出参数，想要可以创建，并接受，或者填NULL
    int new_fd = accept(sever_fd, NULL, NULL);

    printf("----------\n");
    char buf[60] = {0};
    recv(new_fd, buf, sizeof(buf), 0);

    printf("**********\n");
    printf("%s\n", buf);

    send(new_fd, "nihao", 5, 0);
    close(new_fd);
    close(sever_fd);

    return 0;
}